/* Copyright 2009
 *
 * This program and the accompanying materials
 * are made available under the terms of the
 * Eclipse Public License v1.0 which accompanies
 * this distribution, and is available at
 *
 * 		http://www.eclipse.org/legal/epl-v10.html
 *
 * Unless required by applicable law or agreed to in
 * writing, software distributed under the License is
 * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
 * OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing
 * permissions and limitations under the License.
 *
 * Contributors:
 * 	   IBM Corporation - initial API and implementation for JDT/DLTK
 *     Sean W. Quinn - initial adoption for use with PHP from various sources.
 */
package org.eclipse.php.internal.ui.preferences.formatter.tab;

import java.net.URL;

import org.eclipse.dltk.ui.formatter.IFormatterModifyDialog;
import org.eclipse.dltk.ui.util.SWTFactory;
import org.eclipse.php.core.formatter.PHPCodeFormatterConstants;
import org.eclipse.php.internal.ui.preferences.formatter.PHPFormatterControlManager;
import org.eclipse.php.internal.ui.preferences.formatter.PHPFormatterMessages;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;

/**
 * @author Sean W. Quinn (swquinn@gmail.com)
 */
public class PHPCodeFormatterBracesTabPage extends PHPCodeFormatterTabPage {

	/**
	 * Overrides the default value.
	 */
	protected static int COLUMN_SPAN = 3;

	/**
	 * The tab policy, whether a user has set his formatter to utilize only
	 * tabs, spaces, or a mixture of both.
	 */
	private Combo objectDeclaration;
	private Combo anonymousObjectDeclaration;
	private Combo constructorDeclaration;
	private Combo functionDeclaration;
	private Combo blockDeclaration;
	private Combo switchStatement;
	private Combo caseBlockStatement;
	private Combo arrayInitializer;

	private final String [] bracePositions= {
			PHPCodeFormatterConstants.END_OF_LINE,
		    PHPCodeFormatterConstants.NEXT_LINE,
		    PHPCodeFormatterConstants.NEXT_LINE_SHIFTED,
			PHPCodeFormatterConstants.NEXT_LINE_ON_WRAP
		};

	private final String [] bracePositionLabels = {
		    PHPFormatterMessages.BracesTabPage_position_same_line,
		    PHPFormatterMessages.BracesTabPage_position_next_line,
		    PHPFormatterMessages.BracesTabPage_position_next_line_indented,
		    PHPFormatterMessages.BracesTabPage_position_next_line_on_wrap
		};

	/**
	 * @param dialog
	 */
	public PHPCodeFormatterBracesTabPage(final IFormatterModifyDialog dialog) {
		super(dialog);
	}

	private Combo createExtendedBracesCombo(final PHPFormatterControlManager manager, final Composite group, final Object key, final String label) {
		final Combo combo = manager.createCombo(group, key, label, bracePositions, bracePositionLabels, COLUMN_SPAN);
		return combo;
	}

	/**
	 * @param manager
	 * @param parent
	 */
	@Override
	protected void doCreateOptions(final PHPFormatterControlManager manager, final Composite parent) {
		// **
		//
		final Group group = SWTFactory.createGroup(parent, PHPFormatterMessages.BracesTabPage_group_brace_positions_title, COLUMN_SPAN, 1,
						GridData.FILL_HORIZONTAL);

		// **
		objectDeclaration = createExtendedBracesCombo(manager, group,
				PHPCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_TYPE_DECLARATION,
				PHPFormatterMessages.BracesTabPage_option_class_declaration);
		//tabPolicyListener = new TabPolicyListener(manager);
		//tabPolicy.addSelectionListener(tabPolicyListener);
		//manager.addInitializeListener(tabPolicyListener);

		// **
		anonymousObjectDeclaration = createExtendedBracesCombo(manager, group,
				PHPCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_ANONYMOUS_TYPE_DECLARATION,
				PHPFormatterMessages.BracesTabPage_option_anonymous_class_declaration);
		//tabPolicyListener = new TabPolicyListener(manager);
		//tabPolicy.addSelectionListener(tabPolicyListener);
		//manager.addInitializeListener(tabPolicyListener);

		// **
		constructorDeclaration = createExtendedBracesCombo(manager, group,
				PHPCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_CONSTRUCTOR_DECLARATION,
				PHPFormatterMessages.BracesTabPage_option_constructor_declaration);
		//tabPolicyListener = new TabPolicyListener(manager);
		//tabPolicy.addSelectionListener(tabPolicyListener);
		//manager.addInitializeListener(tabPolicyListener);

		// **
		functionDeclaration = createExtendedBracesCombo(manager, group,
				PHPCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_METHOD_DECLARATION,
				PHPFormatterMessages.BracesTabPage_option_method_declaration);
		//tabPolicyListener = new TabPolicyListener(manager);
		//tabPolicy.addSelectionListener(tabPolicyListener);
		//manager.addInitializeListener(tabPolicyListener);

		// **
		blockDeclaration = createExtendedBracesCombo(manager, group,
				PHPCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_BLOCK,
				PHPFormatterMessages.BracesTabPage_option_blocks);
		//tabPolicyListener = new TabPolicyListener(manager);
		//tabPolicy.addSelectionListener(tabPolicyListener);
		//manager.addInitializeListener(tabPolicyListener);

		// **
		switchStatement = createExtendedBracesCombo(manager, group,
				PHPCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_SWITCH,
				PHPFormatterMessages.BracesTabPage_option_switch_case);
		//tabPolicyListener = new TabPolicyListener(manager);
		//tabPolicy.addSelectionListener(tabPolicyListener);
		//manager.addInitializeListener(tabPolicyListener);

		// **
		caseBlockStatement = createExtendedBracesCombo(manager, group,
				PHPCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_BLOCK_IN_CASE,
				PHPFormatterMessages.BracesTabPage_option_blocks_in_case);
		//tabPolicyListener = new TabPolicyListener(manager);
		//tabPolicy.addSelectionListener(tabPolicyListener);
		//manager.addInitializeListener(tabPolicyListener);

		// **
		arrayInitializer = createExtendedBracesCombo(manager, group,
				PHPCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_ARRAY_INITIALIZER,
				PHPFormatterMessages.BracesTabPage_option_array_initializer);
		//tabPolicyListener = new TabPolicyListener(manager);
		//tabPolicy.addSelectionListener(tabPolicyListener);
		//manager.addInitializeListener(tabPolicyListener);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	protected URL getPreviewContent() {
		return getClass().getResource("bracesPreview.php"); //$NON-NLS-1$
	}
}
